package chwgigs;



public class J21_AcessModifier {

	//캡슐화encapsulation 와 접근 제어
	//OOP의 원칙에서 캡슐화는 객체의 일부를 "보호"하고 노출해도 상관없는 부분을 노출 했을 때에는 
	// "안전"해야 한다는 매커니즘 
	
	// 예를 들어 텔레비젼은 캡슐화의 좋은 예임 
	// 텔레비젼의 수많은 부품들은 금속커버 안에 놓아둠 
	// 클래스 개발자는 변수와 메서드들을 외부로부터 감춰 두어야 함 
	// private  : 자신만 접근 가능
	// protected: 상속 관계의 클래스만 접근 가능
	// public : 어디서나 접근 가능
	// default: 기본 패키지 내 클래스들끼리만 접근 가능 
	
	
	// 클래스에 적용 : public default 만 사용가능
	// 멤버변수에 적용: public private protected
	//메서드에 적용 : public 
	
	
	//결론
	//OOP의 캡슐화 원칙에 따라 
	// 클래스의 멤버변수들은 무조거 private 선언
	//클래스의 메서드들은 외부에 노출하려면 public 으로 선언하고 그외의 경우에는 protected로 선언 한다. 
	
      	 
	public static void main(String[] args) {
	//defualt 클래스 불러오기
	//	J21 DefaultClass dfc=new J21 DefaultClass();
		J21_PublicClass pbc1=new J21_PublicClass();
	     excercise.J21_PublicClass pbc2=new excercise.J21_PublicClass();			
	 
	 
	     //같은 패키지내 멤버변수 접근 pbc1 
	 pbc1.defautval=1;
	 pbc1.publicval=1;
	 //pbc1.privateval=1;
	 
	 
	 //다른 패키지지내 클래스의 멤버변수 접근 pbc2
	 //pbc2.defautval=4;
	   pbc2.publicval=1;
      //pbc.privateval=6;
		
	 
	
	   //같은 클래스내에  메소드 접근   
	    pbc1.publicmethod();
	//	pbc1.privateMethod();	 
		pbc1.defaultMethod();
		
		pbc2.publicmethod();
	
	
	}

}
